package com.linkit.main;

import java.util.ArrayList;

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.RelativeLayout.LayoutParams;
import android.widget.TextView;
import android.widget.Toast;

import com.linkit.config.Setting;
import com.linkit.controller.ConfigsHandler;
import com.linkit.main.article.AdvertiseLayout;
import com.linkit.main.article.StartLayout;
import com.linkit.model.Advertise;
import com.linkit.model.Category;
import com.linkit.model.Site;
import com.linkit.utils.ScreenUtils;
import com.linkit.utils.Utils;

public class MainActivity extends FragmentActivity {

	private static MainActivity instance;
	/** Đối tượng thực hiện các chức năng cho nội dung */
	public ContentManager contentManager;

	/** Lưu trữ đối tượng để back */
	private OnBackPressedListener onBackPressedImpl;

	/** Quản lý dialog */
	public DialogManager dialogManager;

	public ControllerId controllerId;

	public ControllerId preControllerId;

	/** Lưu trữ danh sách các site để lấy dữ liệu */
	public ArrayList<Site> sitesList;

	/** Lưu trữ danh sách các danh mục để lấy dữ liệu */
	public ArrayList<Category> categoriesList;

	public StartLayout startLayout;

	private Advertise advertise;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		instance = this;
		ScreenUtils.initAll(this);
		Font.initFont();
		Setting.initSetting();

		setContentView(R.layout.main);

		// khởi tạo nội dung
		contentManager = new ContentManager(this);

		// khởi tọa dialog
		dialogManager = new DialogManager(this);

		startLayout = new StartLayout();
		if (!isEnableNetworkStartAlert()) {
			return;
		} else {
			startLayout.showProgress();
		}
		ConfigsHandler configsHandler = new ConfigsHandler();
		configsHandler.doRequest(Setting.getSiteId(), Setting.getCatsId(),
				Setting.getTypes(), null);
	}

	public static MainActivity getInstance() {
		return instance;
	}

	// thêm nội dung vào layout
	public void setSubContentLayout(View view) {
		contentManager.addSubContentLayout(view);
	}

	// thêm nội dung vào layout
	public void setSubContentLayout(View view, LayoutParams params) {
		contentManager.addSubContentLayout(view, params);
	}

	// Xóa nội dung layout
	public void removeSubContentlayout() {
		contentManager.removeSubContentlayout();
		onBackPressedImpl = null;
	}

	/**
	 * Hiện thị header có chức năng back
	 * 
	 * @param title
	 *            : Tiêu đề của header, nếu null thì không thiết lập lại tiêu đề
	 * @param view
	 *            : layout con của tiêu đề, nếu null thì xóa
	 */

	public void setBackHeader(int resIdTitle, View view) {
		contentManager.getHeaderLayout().showBackHeader(true);
		contentManager.getHeaderLayout().setOnClickListener(
				contentManager.getHeaderLayout());
		contentManager.getHeaderLayout().setOnClickListener(
				contentManager.getHeaderLayout());
		contentManager.getHeaderLayout().setHeaderTitle(
				Utils.getString(resIdTitle));
		contentManager.getHeaderLayout().setArrowIcon(R.drawable.back_icon);

		if (view != null) {
			contentManager.getHeaderLayout().addHeaderContent(view);
		} else {
			contentManager.getHeaderLayout().removeHeaderContent();
		}
	}

	/**
	 * Hiện thị header có chức năng config
	 * 
	 * @param title
	 *            : Tiêu đề của header, nếu null thì không thiết lập lại tiêu đề
	 * @param view
	 *            : layout con của tiêu đề, nếu null thì xóa
	 */

	public void setConfigHeader(View view, OnClickListener listener) {
		contentManager.getHeaderLayout().showBackHeader(true);
		contentManager.getHeaderLayout().setOnClickListener(
				contentManager.getHeaderLayout());
		contentManager.getHeaderLayout().setArrowIcon(R.drawable.header_menu);
		contentManager.getHeaderLayout().setOnClickListener(listener);
		contentManager.getHeaderLayout().setHeaderTitle("Tin mới");

		if (view != null) {
			contentManager.getHeaderLayout().addHeaderContent(view);
		} else {
			contentManager.getHeaderLayout().removeHeaderContent();
		}
	}
	
	/**
	 * ẩn header
	 * @param isVisibility
	 */
	public void setVisibleHeader(boolean isVisibility){
		if(isVisibility){
			contentManager.getHeaderLayout().setVisibility(View.VISIBLE);
		}else{
			contentManager.getHeaderLayout().setVisibility(View.GONE);
		}
	}

	public void setOnBackPressedImpl(OnBackPressedListener onBackPressedImpl) {
		this.onBackPressedImpl = onBackPressedImpl;
	}

	/**
	 * Yêu cầu kết nối mạng trước khi tìm kiếm xe
	 */
	public boolean isEnableNetworkAlert() {
		boolean result = true;
		// Cảnh báo thiết bị không kết nối internet
		ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
		NetworkInfo netWorkInfo = connectivityManager.getActiveNetworkInfo();
		if (!(netWorkInfo != null && netWorkInfo.isConnectedOrConnecting())) {
			dialogManager.showAlert(
					Utils.getString(R.string.alert_dialog_title),
					getResources().getString(R.string.no_network));
			result = false;
		}
		return result;
	}

	/**
	 * Yêu cầu kết nối mạng trước khi tìm kiếm xe
	 */
	public boolean isEnableNetworkStartAlert() {
		boolean result = true;
		// Cảnh báo thiết bị không kết nối internet
		ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
		NetworkInfo netWorkInfo = connectivityManager.getActiveNetworkInfo();
		if (!(netWorkInfo != null && netWorkInfo.isConnectedOrConnecting())) {
			startLayout
					.showAlert(getResources().getString(R.string.no_network));
			result = false;
		}
		return result;
	}

	/**
	 * Hiện thị message thông báo giữa màn hình
	 * 
	 * @param message
	 */
	public void showToast(int resId) {
		Toast toast = Toast.makeText(this, Utils.getString(resId),
				Toast.LENGTH_LONG);
		TextView v = (TextView) toast.getView().findViewById(
				android.R.id.message);
		if (v != null) {
			v.setGravity(Gravity.CENTER);
		}
		toast.setGravity(Gravity.CENTER, 0, 0);
		toast.show();
	}

	/**
	 * thiết lập controller đang được active
	 * 
	 * @param controllerId
	 */
	public void setControllerId(ControllerId current) {
		this.preControllerId = controllerId;
		this.controllerId = current;
	}

	@Override
	public void onBackPressed() {
		Log.e("", "onBackPressed() onBackPressedInterface = "
				+ onBackPressedImpl);

		// Nếu hiện thị dialog thì ẩn
		if (dialogManager.isVisible()) {
			dialogManager.hideDialog(null);
			return;
		}

		// thực hiện chức năng back ở các chức năng khác
		if (onBackPressedImpl != null) {
			onBackPressedImpl.onBackPressed();
		} else {
			super.onBackPressed();
		}
	}
	
	

	@Override
	protected void onResume() {
		scheduleAdvertise();
		super.onResume();
	}

	public void exit() {
		finish();
		android.os.Process.killProcess(android.os.Process.myPid());
		super.onDestroy();
	}

	public Advertise getAdvertise() {
		return advertise;
	}

	public void setAdvertise(Advertise advertise) {
		this.advertise = advertise;
	}

	/**
	 * đặt lịch để hiện thị quảng cáo
	 */
	public void scheduleAdvertise() {
		
		if(advertise == null) return;
		
		new Handler().postDelayed(new Runnable() {

			@Override
			public void run() {
				AdvertiseLayout advertiseLayout = new AdvertiseLayout();
				advertiseLayout.showPages();
			}
		}, 5 * 1000);
	}
}
